#include <my_header.h>

/* Usage:  */
int main(void){
    // addrinfo结构体：
    // ai_family：地址族（如AF_INET为IPv4，AF_INET6为IPv6）。
    // ai_addr：指向sockaddr的通用地址结构。
    // ai_next：指向下一个结果的指针（链表结构）。
    struct addrinfo *res;

    // DNS请求，获得结果
    // 第1参数：目标域名（"cskaoyan.com"）。
    // 第2参数：服务名（如"http"），NULL表示不指定端口。
    // 第3参数：过滤条件（如AF_INET仅IPv4），NULL表示返回所有类型。
    // 第4参数：输出参数，存储查询结果链表头指针res。
    getaddrinfo("cskaoyan.com", NULL, NULL, &res);

    // 遍历res
    for(struct addrinfo *p = res; p != NULL; p = p->ai_next){
        struct sockaddr *ipTag = p->ai_addr;

        // 判断获得的是否是IPv4地址
        if(p->ai_family == AF_INET){
            // 强制转换为 IPv4 地址结构体
            struct sockaddr_in *socketTagv4 = (struct sockaddr_in *)ipTag;

            // 提取 IPv4 地址结构体中的 in_addr 字段
            struct in_addr ipTagv4 = socketTagv4->sin_addr;

            // 4. 将网络字节序的 IPv4 地址转为点分十进制字符串（人类可读格式）
            char* strIp = inet_ntoa(ipTagv4);  // network to ascii

            // 打印 IPv4 地址
            printf("IPv4, ip = %s \n", strIp);
        }
    }

    freeaddrinfo(res);
    return 0;
}
